using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools
{
    /// <summary>
    /// <para>Import Floorplans To Indoors Geodatabase</para>
    /// <para>Imports floor plans from CAD files into an indoor dataset that conforms to the ArcGIS Indoors Information Model. The output of this tool can be used to create floor-aware scenes for use in floor-aware apps, as well as to generate an indoor network for routing.</para>
    /// <para>将楼层平面图从 CAD 文件导入到符合 ArcGIS Indoors 信息模型的室内数据集中。此工具的输出可用于创建用于楼层感知应用的楼层感知场景，以及生成用于路由的室内网络。</para>
    /// </summary>    
    [DisplayName("Import Floorplans To Indoors Geodatabase")]
    public class ImportFloorplansToIndoorsGDB : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportFloorplansToIndoorsGDB()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_geodatabase">
        /// <para>Input Geodatabase</para>
        /// <para>The geodatabase (file or enterprise) into which the floor plan data will be loaded.</para>
        /// <para>将楼层平面图数据加载到其中的地理数据库（文件或企业）。</para>
        /// </param>
        /// <param name="_in_excel_template">
        /// <para>Input Excel Template File</para>
        /// <para>An Excel spreadsheet (.xls or .xlsx file) that contains input and configuration parameters.</para>
        /// <para>包含输入和配置参数的 Excel 电子表格（.xls 或 .xlsx 文件）。</para>
        /// </param>
        /// <param name="_uniqueid_delimiter">
        /// <para>Unique ID Delimiter</para>
        /// <para><xdoc>
        ///   <para>Specifies the delimiter that will separate key values in the Indoors model hierarchy.</para>
        ///   <bulletList>
        ///     <bullet_item>Period—The ID will include key values separated by periods. This is default.</bullet_item><para/>
        ///     <bullet_item>Hyphen—The ID will include key values separated by hyphens.</bullet_item><para/>
        ///     <bullet_item>Underscore—The ID will include key values separated by underscores.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分隔 Indoors 模型层次结构中的键值的分隔符。</para>
        ///   <bulletList>
        ///     <bullet_item>周期 - ID 将包括以周期分隔的键值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>连字符—ID 将包含以连字符分隔的键值。</bullet_item><para/>
        ///     <bullet_item>下划线 - ID 将包括用下划线分隔的键值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public ImportFloorplansToIndoorsGDB(object _in_geodatabase, object _in_excel_template, _uniqueid_delimiter_value _uniqueid_delimiter)
        {
            this._in_geodatabase = _in_geodatabase;
            this._in_excel_template = _in_excel_template;
            this._uniqueid_delimiter = _uniqueid_delimiter;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Import Floorplans To Indoors Geodatabase";

        public override string CallName => "indoors.ImportFloorplansToIndoorsGDB";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_geodatabase, _in_excel_template, _uniqueid_delimiter.GetGPValue(), _sliver_threshold, _door_close_buffer, _updated_gdb, _area_unit_of_measure.GetGPValue()];

        /// <summary>
        /// <para>Input Geodatabase</para>
        /// <para>The geodatabase (file or enterprise) into which the floor plan data will be loaded.</para>
        /// <para>将楼层平面图数据加载到其中的地理数据库（文件或企业）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geodatabase { get; set; }


        /// <summary>
        /// <para>Input Excel Template File</para>
        /// <para>An Excel spreadsheet (.xls or .xlsx file) that contains input and configuration parameters.</para>
        /// <para>包含输入和配置参数的 Excel 电子表格（.xls 或 .xlsx 文件）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Excel Template File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_excel_template { get; set; }


        /// <summary>
        /// <para>Unique ID Delimiter</para>
        /// <para><xdoc>
        ///   <para>Specifies the delimiter that will separate key values in the Indoors model hierarchy.</para>
        ///   <bulletList>
        ///     <bullet_item>Period—The ID will include key values separated by periods. This is default.</bullet_item><para/>
        ///     <bullet_item>Hyphen—The ID will include key values separated by hyphens.</bullet_item><para/>
        ///     <bullet_item>Underscore—The ID will include key values separated by underscores.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分隔 Indoors 模型层次结构中的键值的分隔符。</para>
        ///   <bulletList>
        ///     <bullet_item>周期 - ID 将包括以周期分隔的键值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>连字符—ID 将包含以连字符分隔的键值。</bullet_item><para/>
        ///     <bullet_item>下划线 - ID 将包括用下划线分隔的键值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Unique ID Delimiter")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _uniqueid_delimiter_value _uniqueid_delimiter { get; set; }

        public enum _uniqueid_delimiter_value
        {
            /// <summary>
            /// <para>Period</para>
            /// <para>Period—The ID will include key values separated by periods. This is default.</para>
            /// <para>周期 - ID 将包括以周期分隔的键值。这是默认设置。</para>
            /// </summary>
            [Description("Period")]
            [GPEnumValue("PERIOD")]
            _PERIOD,

            /// <summary>
            /// <para>Hyphen</para>
            /// <para>Hyphen—The ID will include key values separated by hyphens.</para>
            /// <para>连字符—ID 将包含以连字符分隔的键值。</para>
            /// </summary>
            [Description("Hyphen")]
            [GPEnumValue("HYPHEN")]
            _HYPHEN,

            /// <summary>
            /// <para>Underscore</para>
            /// <para>Underscore—The ID will include key values separated by underscores.</para>
            /// <para>下划线 - ID 将包括用下划线分隔的键值。</para>
            /// </summary>
            [Description("Underscore")]
            [GPEnumValue("UNDERSCORE")]
            _UNDERSCORE,

        }

        /// <summary>
        /// <para>Sliver Threshold</para>
        /// <para>The ratio of perimeter to area that defines a sliver polygon. It is used when importing Unit polygons to improve the quality of the imported data. Unit polygons that are determined to be slivers are placed in a review geodatabase located in the scratch folder of the ArcGIS Pro project. The default value is 2.</para>
        /// <para>定义条状面的周长与面积之比。在导入单位面时使用它来提高导入数据的质量。确定为条形的单位面将放置在位于 ArcGIS Pro 工程的暂存文件夹中的查看地理数据库中。默认值为 2。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sliver Threshold")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _sliver_threshold { get; set; } = 2;


        /// <summary>
        /// <para>Door Close Buffer</para>
        /// <para>The distance, in inches, the tool will search from a door to find and snap to the nearest wall. This parameter is used when the CLOSE_DOORS column is set to Y in the input Excel template file. The default value is 0.</para>
        /// <para>距离，以英寸为单位，该工具将从门搜索以找到并捕捉到最近的墙壁。当输入 Excel 模板文件中的 CLOSE_DOORS 列设置为 Y 时，将使用此参数。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Door Close Buffer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _door_close_buffer { get; set; } = 0;


        /// <summary>
        /// <para>Updated Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_gdb { get; set; }


        /// <summary>
        /// <para>Area Unit of Measure</para>
        /// <para><xdoc>
        ///   <para>Specifies the unit of measure that will be used to calculate area for the area fields when importing floor plans.</para>
        ///   <bulletList>
        ///     <bullet_item>Square Feet—Area will be defined in square feet. This is default.</bullet_item><para/>
        ///     <bullet_item>Square Meters—Area will be defined in square meters.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定导入楼层平面图时将用于计算面积字段面积的度量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>平方英尺—面积将以平方英尺为单位定义。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>平方米—面积将以平方米为单位定义。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area Unit of Measure")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _area_unit_of_measure_value _area_unit_of_measure { get; set; } = _area_unit_of_measure_value._SQUARE_FEET;

        public enum _area_unit_of_measure_value
        {
            /// <summary>
            /// <para>Square Feet</para>
            /// <para>Square Feet—Area will be defined in square feet. This is default.</para>
            /// <para>平方英尺—面积将以平方英尺为单位定义。这是默认设置。</para>
            /// </summary>
            [Description("Square Feet")]
            [GPEnumValue("SQUARE_FEET")]
            _SQUARE_FEET,

            /// <summary>
            /// <para>Square Meters</para>
            /// <para>Square Meters—Area will be defined in square meters.</para>
            /// <para>平方米—面积将以平方米为单位定义。</para>
            /// </summary>
            [Description("Square Meters")]
            [GPEnumValue("SQUARE_METERS")]
            _SQUARE_METERS,

        }

        public ImportFloorplansToIndoorsGDB SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}